哪种方法更适合重写网址
(a)中。使用htaccess文件并在其中使用正则表达式,用于重写规则
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^users/(\d+)*$ ./profile.php?id=$1
RewriteRule ^threads/(\d+)*$ ./thread.php?id=$1
RewriteRule ^search/(.*)$ ./search.php?query=$1
OR
(b)中。
使用htacess文件只需将每个url重定向到index.php
,然后使用PHP进行进一步的重定向。
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*$ ./index.php
之后,index.php
可以使用$_SERVER['REQUEST_URI']
处理每个网址,我们可以使用require()
语句加载特定文件
哪种方法在安全性和速度方面更好?
答案 0 :(得分:0)
此方法更完美,使用以下代码作为.htaccess文件,并定义您希望在脚本中访问的目录,例如:js,css或upload folders
RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|public|assets|**data**|**live**|**css**|**js**|**images**).
如果你想把你的脚本放在文件夹中,你必须在/index.php之前定义文件夹名称,这样我们才能
RewriteRule ^(.*)$ **anyFolderName**/index.php/$1 [PT,L]
请确保您没有添加任何额外的空格,字母或输入,否则重写模型将无法执行。
注意:还要确保从服务器/ apache / apache modules / rewrite_module运行/检查rewrite_module。
<IfModule mod_rewrite.c>
# Turn on URL rewriting
RewriteEngine On
# If your website begins from a folder e.g localhost/my_project then
# you have to change it to: RewriteBase /my_project/
# If your site begins from the root e.g. example.local/ then
# let it as it is
RewriteBase /
# Protect application and system files from being viewed when the index.php is missing
RewriteCond $1 ^(application|system|private|logs)
# Rewrite to index.php/access_denied/URL
RewriteRule ^(.*)$ index.php/access_denied/$1 [PT,L]
# Allow these directories and files to be displayed directly:
RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|public|assets)
# No rewriting
RewriteRule ^(.*)$ - [PT,L]
# Rewrite to index.php/URL
RewriteRule ^(.*)$ /index.php/$1 [PT,L]
</IfModule>
答案 1 :(得分:0)
这取决于您的要求。如果你已经创建了那些php文件,那么将第一个.htaccess重构为这样的单一规则应该可以正常工作:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^([\w-]+)/(\d+)/?$ $1.php?id=$2 [L,QSA]