Apache mod_rewrite Remove.php不工作

Apache mod_rewrite Remove.php不工作,apache,mod-rewrite,Apache,Mod Rewrite,第一条规则起作用,因此可以正确重定向浏览器。但是,第二条规则应该是剥离.php,以便访问者可以访问domain.com/services而不是domain.com/services.php,这条规则不起作用。第三个条件是在末尾添加一个/ 知道为什么stripping.php会给我一个404错误吗 RewriteEngine on RewriteCond %{http_HOST} ^domain.com [NC] RewriteRule ^(.*)$ http://www.domain.com/$

第一条规则起作用,因此可以正确重定向浏览器。但是,第二条规则应该是剥离.php,以便访问者可以访问domain.com/services而不是domain.com/services.php,这条规则不起作用。第三个条件是在末尾添加一个/

知道为什么stripping.php会给我一个404错误吗

RewriteEngine on
RewriteCond %{http_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
有什么建议吗?

试试这个亲爱的:

The requested URL /s/p/domain.com/public/packing-tips.php was not found on this server?

希望对您有所帮助。

请尝试删除此行,然后再次检查:

 RewriteRule ^([^/]+)/$1

要剥离.php扩展,请使用以下.htaccess代码:

RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
如果您请求此URL
domain.com/services
,如果该文件/文件夹不存在,它将被重定向到
domain.com/services/
。然后,如果(仅当)
domain.com/services.php
确实存在,它将被重写为
domain.com/services.php
。如果没有这样的php文件,那么您应该看到404错误

理论上,您可以在“强制规范名称”规则之后添加这些行,然后您可以在以后删除一些重写规则(如果您有相当多的重写规则,则很有用),但您必须在您的站点上验证这一点——这对我来说很好,但您可能有特定的情况:

RewriteEngine on
# force canonical name
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,QSA]

# Add .php to requested resource (if such php file does exist)
# e.g. www.example.com/services/ => www.example.com/services.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)/$ /$1.php [QSA,L]

# Force trailing slash to be present (only if such file does not exist)
# e.g. www.example.com/services => www.example.com/services/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*[^/])$ /$1/ [R=301,QSA]

如果你直接访问URL(最后是.php),它会显示网页吗?例如,如果您访问domain.com/services.php或domain.com/packing-tips.php,那么您会得到404吗?不,我没有得到404,页面显示与它应该显示的完全一样。但是,当我从地址栏手动删除.php时,它会显示上面的错误。当我转到domain.com/size-and-pricing.php时,它会正确显示。当我删除.php时,会出现此错误:在此服务器上找不到请求的URL/sizes and pricing/.php。@samseaborn:稍微修改了我的答案,以解决您遇到的尾部斜杠问题。请再试一次。
RewriteEngine on
# force canonical name
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,QSA]

# Add .php to requested resource (if such php file does exist)
# e.g. www.example.com/services/ => www.example.com/services.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)/$ /$1.php [QSA,L]

# Force trailing slash to be present (only if such file does not exist)
# e.g. www.example.com/services => www.example.com/services/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*[^/])$ /$1/ [R=301,QSA]
# Do not do anything for already existing files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]