繁体   English   中英

使用.htaccess清理URL和可能的建议

[英]Clean URL using .htaccess and possible suggestions

我有以下网址:

http://mywebsite.com/somepage.php?product=343&type=4

我希望用户能够输入:

http://mywebsite.com/somepage?product=343&type=4

该角色应处理子目录中的页面和不同的文件名(不仅仅是Somepage或子域)。 例如:

http://mywebsite.com/subdomain/somepage.php?product=343&type=4

可以通过键入以下内容进行访问:

http://mywebsite.com/subdomain/somepage?product=343&type=4

我也想知道这样的链接是否可以更干净?

这将接受任何不指向文件或目录的请求,如果.php文件存在,则追加“ .php”。

RewriteEngine On
RewriteBase /

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

这应该通过仅在目标文件存在时重写请求来解决问题。

我还没有测试过,但是可能有效。

RewriteEngine On
RewriteBase /

RewriteRule ^somepage(.*)$ somepage.php [QSA,L]

虽然使用@Nathan所示的.htaccess重写URL通常会接受正确的方法,但是您也可以选择基于每个目录使用MultiViews

<Directory /home/www/sitename/htdocs>
Options + MultiViews
</Directory>

来自未知文件扩展名的404上的多视图将开始在文件名中搜索匹配项。 也就是说,如果URI为foo ,它将寻找foo.* ; 也就是说,它可能会找到foo.giffoo.jpgfoo.html等,并会返回最高质量的选项。

如果您确定可以按唯一名称提供所有内容(不难),那么请务必使用此功能。 然后只需将所有锚点更改为直接指向somepage?product=343&type=4而不是somepage.php?product=343&type=4

编辑

是的,这样的链接可以变得更加整洁。 使用URL重写,您可以将URL重写为:

somepage/product/343/type/4somepage/343/4

这是通过适当的(分别)正则表达式完成的:

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)$ $1.php?$2=$3&$4=$5 [L,QSA]

要么

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)/(.*)/(.*)$ $1.php?product=$2&type=$3 [L,QSA]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM