【发布时间】:2014-09-11 00:52:31
【问题描述】:
我正在开发一个网站,但我很恼火我必须使用丑陋的 URL。所以,我有一个http://example.com/user.php?id=54 和另一个http://example.com/foobar.php?name=Test 的URL。
我怎样才能将它们都转换为漂亮的 URL,而不将其添加到 .htaccess 中以获得我想要制作的每个 URL?
example.com/user.php?id=54 => example.com/user/54
example.com/foobar.php?name=Test => example.com/foobar/Test
我的 .htaccess 文件中有这个:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]
RewriteRule ^$1/$3/? /$1.php?$2=$3 [NC]
谢谢, 露西
我的完整 .htaccess 文件:
# include classes on every page
php_value auto_prepend_file Resources/Classes.php
# add custom Directory Indexes
DirectoryIndex index.php Default.php Down.php
# begin routing to pretty URLs
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^/(?!Resources)([0-9a-zA-Z-]+)/([0-9]+) /$1.php?id=$2 [NC]
RewriteRule ^/(?!Resources)([0-9a-zA-Z-]+)/([a-zA-Z-]+) /$1.php?name=$2 [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
【问题讨论】:
-
你应该重写所有对 index.php 的请求,然后包含你想要的文件。看看这个kratedesign.com/blog/2010/03/php-router-and-clean-urls
-
我更喜欢使用 .htaccess,但谢谢。
-
@estshy:现在只是阅读您的评论,但这实际上与我的回答所暗示的非常相似 :) 我猜露西已经否定了我回答中的所有工作:(
-
我的两分钱在这里,但我想强调@estshy 的评论提出了一个极其重要的观点。 URL 和路由是您的应用程序不可分割的一部分,应该不由网络服务器负责。试想一下,有朝一日该应用程序可能会在根本不支持 .htacess 文件的 NGinx 或 Lighttpd 上运行。此外,mod_rewrite 是一个复杂的野兽,在 .htaccess 文件中使用这些指令是性能杀手。
-
@SirDarius 我也有类似的感觉。我也觉得让服务器处理它有很多好处,因为它被妖魔化了并且应该更快地处理(并且内置到 Apache 中)。无论如何,作为开发人员能够控制路径并且不必依赖网络系统管理员来启用
.htaccess和mod_rewrite是很好的——想象一下你依赖某个人,有一天他们决定需要节省资源或提高安全性并翻转开关将其带走;更有理由将其构建到路由器中。我最喜欢它的可见性;您的逻辑不在隐藏文件中。
标签: php apache .htaccess url pretty-urls