【问题标题】:mod_rewrite for removing .php extension is producing 404 error用于删除 .php 扩展名的 mod_rewrite 产生 404 错误
【发布时间】:2014-10-09 19:55:46
【问题描述】:

我已经为此查找并尝试了 3 或 4 个关于 SO 的答案,但它们对我不起作用。

我有dev.mydomain.com/pw/,我希望dev.mydomain.com/pw/builder 重定向到dev.mydomain.com/pw/builder.php 等。

我尝试了几种解决方案,包括:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.php [L]

来自:here 和:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]

来自:here

还有:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ $1.php [L]

我从其他项目中得到的。

我也尝试过将 RewriteBase 操纵到各种事物上,例如 //pw/ 无效。

有什么明显我做错/没有做的事情吗?

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:

    将此规则放在/pw/.htaccess:

    RewriteEngine On
    RewriteBase /pw/
    
    RewriteCond %{THE_REQUEST} /(?:index)?(.*?)\.php[\s?] [NC]
    RewriteRule ^ %1 [R=301,L,NE]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/pw/$1\.php -f [NC]
    RewriteRule ^(.+?)/?$ $1.php [L]
    

    【讨论】:

    • 当你得到 404 时,你在浏览器中看到了什么 URL?
    • 这就是转换的内容。当我单击指向“builder.php”的链接时,这就是它重定向我的方式。如果我输入 /pw/builder 它会显示 404。
    • 在浏览器中输入dev.mydomain.com/pw/builder会发生什么?
    • 未找到 在此服务器上未找到请求的 URL /dev/pw/builder。
    • 所以 dev.mydomain.com/pw/builder 是 404 并且 dev.mydomain.com/pw/builder.php 加载正常吗?
    猜你喜欢
    • 2013-10-11
    • 2014-03-24
    • 2012-04-09
    • 1970-01-01
    • 2015-06-29
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多