【问题标题】:.htaccess rewrites for specific directories.htaccess 重写特定目录
【发布时间】:2014-01-30 12:17:59
【问题描述】:

我已被分配到一个新网站,我需要将页面路由和“虚 URL”与 .htaccess 结合起来

我真的不熟悉 htaccess,尽管我进行了所有的研究,但我没有得到任何可靠的答案。

该网站有一个定制的 PHP 管理系统,位于一个名为“admin”的子目录中。我根本不想弄乱它,所以我对 htaccess 所做的任何更改都不会影响该子目录。

因此,鉴于该页面有 3 个主要“页面”:主页、购买和销售,我需要向“www.sitename.com”和“www.sitename.com/index.php”发出请求以路由到主页。我需要向“www.sitename.com/sell”发出请求以路由到销售页面。

然后最难的部分是,我需要向“www.sitename.com/buy”发出请求以路由到“buy.php”,但向“www.sitename.com/buy/category-name”发出请求路由到“www.sitename.com/buy.php?c=12”

我知道有很多问题要问,但如果有人能指导我正确的方向,将不胜感激。

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    这些规则应该适合你:

    RewriteEngine On
    RewriteBase /
    
    # skip admin OR any valid file/dir
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f [OR] 
    RewriteCond %{REQUEST_URI} /admin/ [NC]
    RewriteRule ^ - [L]
    
    RewriteRule ^(sell|buy)/?$ $1.php [NC,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(buy)/([^/]+)/?$ $1.php?c=$2 [L,NC,QSA]
    

    【讨论】:

    • 如果我转到 /buy 或 /sell 或 /index 等,这将有效... 但是,如果我转到 /buy/category-name,则会收到 500 服务器错误。即使我去购买/3,我仍然会收到内部服务器错误...
    【解决方案2】:

    试试这个:

    RewriteEngine On  
    
    RewriteCond %{SCRIPT_FILENAME} !-d  
    RewriteCond %{SCRIPT_FILENAME} !-f  
    
    RewriteRule ^sell$ ./sell.php
    RewriteRule ^buy$ ./buy.php
    RewriteRule ^buy/(.*)$ ./buy.php?c=$1
    

    如果类别始终为数字,请将 (.*) 替换为 (\d+)

    【讨论】:

    • 如果我转到 /buy 或 /sell 或 /index 等,这将有效... 但是,如果我转到 /buy/category-name,则会收到 500 服务器错误。即使我去购买/3,我仍然会收到内部服务器错误...
    • 您确定 500 错误是由 htaccess 而不是 PHP 脚本引起的吗?请提供您的 apache error.log 中的相关行
    【解决方案3】:

    我认为这个希望 /* 下面复制粘贴,保存名称。 htaccess */

    RewriteEngine On
    RewriteBase /yousite.com/
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME}.php -f
    #ex1:http://yousite.com/buy/3
    RewriteRule ([a-zA-Z_-]+)/([0-9]?) buy.php?c=$1
    

    /* 并在你的文件中 php */

    <!-- #ex1:http://yousite.com/buy/3 -->
    <a href="<?php echo "buy/3" ?>">buy/3</a>
    

    【讨论】:

    • 如果我转到 /buy 或 /sell 或 /index 等,这将有效... 但是,如果我转到 /buy/category-name,则会收到 500 服务器错误。即使我去购买/3,我仍然会收到内部服务器错误...
    • www.sitename.com/buy/3 仅在两个条件下使用 ... www.sitename.com/abjad/number ... 如果您想要 www.sitename.com / buy / kategory,然后必须再添加一个 RewriteRule ([a-zA-Z_-] +) / ([a-zA-Z_-] +) buy.php?类别 = $ 1
    猜你喜欢
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多